package com.zhj.csnote;

import com.zhj.interview.Test02;

/**
 * @author zhj
 */
public class Test01 {

    public static void main(String[] args) {
        Test01 test01 = new Test01();
        int[] arr = {2,3,4,7,3,1,2,3,5,4};
        System.out.println(test01.duplicate(arr));
    }

    /**
     * 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的，
     * 但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。
     * 例如，如果输入长度为7的数组[2,3,1,0,2,5,3]，那么对应的输出是2或者3。存在不合法的输入的话输出-1
     * 示例1
     * 输入：
     * [2,3,1,0,2,5,3]
     * 返回值：
     * 2或3都是对的
     * @param numbers
     * @return
     */
    public int duplicate (int[] numbers) {
        // write code here
        for(int i = 0; i < numbers.length; i++) {
            while (numbers[i] != i) {
                if(numbers[i] == numbers[numbers[i]]) {
                    return numbers[i];
                }
                swap(numbers,i,numbers[i]);
            }
            //swap(numbers,i,numbers[i]);
        }
        return -1;
    }

    public void swap(int[] numbers, int i, int j) {
        int tmp = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = tmp;
    }
}
